608060405234801561001057600080fd5b50612735806100206000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636c94522111610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e146108c5578063ec342ad0146108f3578063f1127ed8146108fb578063f68a4d371461094d578063fa8f34551461096a57610227565b8063a9059cbb14610818578063b4b5ea5714610844578063c894c4441461086a578063cbeb17a314610887578063cea9d26f1461088f57610227565b8063782d6fe1116100ff578063782d6fe1146107855780637af548c1146107b157806395d89b41146107dc57806397d63f93146107e4578063a457c2d7146107ec57610227565b80636c945221146105ba5780636fcfff45146106fa57806370a082311461073957806373f03dff1461075f57610227565b8063313ce567116101b357806342966c681161018257806342966c68146105415780634bda2e201461055e578063587cde1e146105665780635c19a95c1461058c57806364dd48f5146105b257610227565b8063313ce567146104a557806339509351146104c35780633af9e669146104ef57806340c10f191461051557610227565b806312d43a51116101fa57806312d43a51146103275780631624f6c61461032f57806318160ddd1461045f57806323b872dd14610467578063252408101461049d57610227565b806306fdde031461022c578063095ea7b3146102a957806311d3e6c4146102e957806311fd8a8314610303575b600080fd5b610234610990565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b038135169060200135610a1e565b604080519115158252519081900360200190f35b6102f1610afe565b60408051918252519081900360200190f35b61030b610b0e565b604080516001600160a01b039092168252519081900360200190f35b61030b610b1d565b61045d6004803603606081101561034557600080fd5b810190602081018135600160201b81111561035f57600080fd5b82018360208201111561037157600080fd5b803590602001918460018302840111600160201b8311171561039257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156103e457600080fd5b8201836020820111156103f657600080fd5b803590602001918460018302840111600160201b8311171561041757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610b319050565b005b6102f1610bbc565b6102d56004803603606081101561047d57600080fd5b506001600160a01b03813581169160208101359091169060400135610bc2565b61030b610db1565b6104ad610dc0565b6040805160ff9092168252519081900360200190f35b6102d5600480360360408110156104d957600080fd5b506001600160a01b038135169060200135610dc9565b6102f16004803603602081101561050557600080fd5b50356001600160a01b0316610eba565b6102d56004803603604081101561052b57600080fd5b506001600160a01b038135169060200135610ed5565b6102d56004803603602081101561055757600080fd5b5035610f51565b61045d610f65565b61030b6004803603602081101561057c57600080fd5b50356001600160a01b0316611030565b61045d600480360360208110156105a257600080fd5b50356001600160a01b031661104e565b6102f161105b565b61045d600480360360a08110156105d057600080fd5b810190602081018135600160201b8111156105ea57600080fd5b8201836020820111156105fc57600080fd5b803590602001918460018302840111600160201b8311171561061d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561066f57600080fd5b82018360208201111561068157600080fd5b803590602001918460018302840111600160201b831117156106a257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff1692505060208101356001600160a01b03169060400135611069565b6107206004803603602081101561071057600080fd5b50356001600160a01b03166110d2565b6040805163ffffffff9092168252519081900360200190f35b6102f16004803603602081101561074f57600080fd5b50356001600160a01b03166110ea565b61045d6004803603602081101561077557600080fd5b50356001600160a01b031661110c565b6102f16004803603604081101561079b57600080fd5b506001600160a01b0381351690602001356111c5565b6102f1600480360360608110156107c757600080fd5b508035906020810135906040013515156113cd565b610234611529565b6102f1611583565b6102d56004803603604081101561080257600080fd5b506001600160a01b038135169060200135611589565b6102d56004803603604081101561082e57600080fd5b506001600160a01b0381351690602001356116d1565b6102f16004803603602081101561085a57600080fd5b50356001600160a01b0316611857565b6102f16004803603602081101561088057600080fd5b50356118ba565b6102f16118de565b6102d5600480360360608110156108a557600080fd5b506001600160a01b038135811691602081013590911690604001356118e4565b6102f1600480360360408110156108db57600080fd5b506001600160a01b0381358116916020013516611952565b6102f161197d565b61092d6004803603604081101561091157600080fd5b5080356001600160a01b0316906020013563ffffffff16611989565b6040805163ffffffff909316835260208301919091528051918290030190f35b6102f16004803603602081101561096357600080fd5b50356119b6565b61045d6004803603602081101561098057600080fd5b50356001600160a01b03166119db565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a165780601f106109eb57610100808354040283529160200191610a16565b820191906000526020600020905b8154815290600101906020018083116109f957829003601f168201915b505050505081565b3360008181526008602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060013332148015610a9757506004546001600160a01b031615155b15610af857600480546040805163ed49c02560e01b815290516001600160a01b039092169263ed49c02592828201926000929082900301818387803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050505b92915050565b6000610b08611a94565b90505b90565b6004546001600160a01b031681565b60025461010090046001600160a01b031681565b60065415610b7c576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8251610b8f90600090602086019061258b565b508151610ba390600190602085019061258b565b506002805460ff191660ff929092169190911790555050565b60055481565b6000826001600160a01b038116610bd857600080fd5b6001600160a01b038116301415610bee57600080fd5b6001600160a01b0385166000908152600860209081526040808320338452909152902054610c22908463ffffffff611aa916565b6001600160a01b0386166000908152600860209081526040808320338452909152812091909155610c52846118ba565b6001600160a01b038716600090815260076020526040902054909150610c7e908263ffffffff611aa916565b6001600160a01b038088166000908152600760205260408082209390935590871681522054610cb3908263ffffffff611aeb16565b6001600160a01b0380871660008181526007602090815260409182902094909455805188815290519193928a16926000805160206126b783398151915292918290030190a36001600160a01b038087166000908152600a6020526040808220548884168352912054610d2a92918216911683611b45565b6001925050503332148015610d4957506004546001600160a01b031615155b15610daa57600480546040805163ed49c02560e01b815290516001600160a01b039092169263ed49c02592828201926000929082900301818387803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b505050505b9392505050565b6003546001600160a01b031681565b60025460ff1681565b3360009081526008602090815260408083206001600160a01b0386168452909152812054610dfd908363ffffffff611aeb16565b3360008181526008602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a35060013332148015610a9757506004546001600160a01b031615610af857600480546040805163ed49c02560e01b815290516001600160a01b039092169263ed49c02592828201926000929082900301818387803b158015610adf57600080fd5b6001600160a01b031660009081526007602052604090205490565b6004546000906001600160a01b0316331480610f00575060025461010090046001600160a01b031633145b610f3e576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b4b73a32b960b11b604482015290519081900360640190fd5b610f488383611c97565b50600192915050565b6000610f5d3383611e01565b506001919050565b6003546001600160a01b03163314610faf576040805162461bcd60e51b81526020600482015260086024820152672170656e64696e6760c01b604482015290519081900360640190fd5b60028054600380546001600160a01b03818116610100908102610100600160a81b0319861617958690556001600160a01b031990921690925560408051938290048316808552919094049091166020830152825190927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d5523928290030190a150565b6001600160a01b039081166000908152600a60205260409020541690565b6110583382611f6c565b50565b69d3c21bcecceda100000081565b611074858585610b31565b670de0b6b3a7640000600655611089816118ba565b60098190556005919091556001600160a01b039190911660008181526007602052604090209190915560028054610100600160a81b031916610100909202919091179055505050565b600c6020526000908152604090205463ffffffff1681565b6001600160a01b038116600090815260076020526040812054610af8906119b6565b60025461010090046001600160a01b03163314611162576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e929181900390910190a15050565b60004382106112055760405162461bcd60e51b81526004018080602001828103825260278152602001806126906027913960400191505060405180910390fd5b6001600160a01b0383166000908152600c602052604090205463ffffffff1680611233576000915050610af8565b6001600160a01b0384166000908152600b6020908152604080832063ffffffff6000198601811685529252909120541683106112a2576001600160a01b0384166000908152600b602090815260408083206000199490940163ffffffff16835292905220600101549050610af8565b6001600160a01b0384166000908152600b6020908152604080832083805290915290205463ffffffff168310156112dd576000915050610af8565b600060001982015b8163ffffffff168163ffffffff16111561139657600282820363ffffffff1604810361130f612609565b506001600160a01b0387166000908152600b6020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529087141561137157602001519450610af89350505050565b805163ffffffff168711156113885781935061138f565b6001820392505b50506112e5565b506001600160a01b0385166000908152600b6020908152604080832063ffffffff9094168352929052206001015491505092915050565b6004546000906001600160a01b031633146113e757600080fd5b8261143857600654604080518681526020810183905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150600554610daa565b600654826114825761147a670de0b6b3a764000061146e61145f828863ffffffff611aa916565b6006549063ffffffff611fec16565b9063ffffffff61204516565b6006556114cc565b60006114a3670de0b6b3a764000061146e61145f828963ffffffff611aeb16565b90506114ad611a94565b8110156114be5760068190556114ca565b6114c6611a94565b6006555b505b6114d76009546119b6565b600555600654604080518781526020810184905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150506005549392505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a165780601f106109eb57610100808354040283529160200191610a16565b60095481565b3360009081526008602090815260408083206001600160a01b03861684529091528120548083106115dd573360009081526008602090815260408083206001600160a01b0388168452909152812055611612565b6115ed818463ffffffff611aa916565b3360009081526008602090815260408083206001600160a01b03891684529091529020555b3360008181526008602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a360019150503332148015610a9757506004546001600160a01b031615610af857600480546040805163ed49c02560e01b815290516001600160a01b039092169263ed49c02592828201926000929082900301818387803b158015610adf57600080fd5b6000826001600160a01b0381166116e757600080fd5b6001600160a01b0381163014156116fd57600080fd5b6000611708846118ba565b3360009081526007602052604090205490915061172b908263ffffffff611aa916565b33600090815260076020526040808220929092556001600160a01b0387168152205461175d908263ffffffff611aeb16565b6001600160a01b0386166000818152600760209081526040918290209390935580518781529051919233926000805160206126b78339815191529281900390910190a3336000908152600a6020526040808220546001600160a01b03888116845291909220546117d1928216911683611b45565b600192505033321480156117ef57506004546001600160a01b031615155b1561185057600480546040805163ed49c02560e01b815290516001600160a01b039092169263ed49c02592828201926000929082900301818387803b15801561183757600080fd5b505af115801561184b573d6000803e3d6000fd5b505050505b5092915050565b6001600160a01b0381166000908152600c602052604081205463ffffffff1680611882576000610daa565b6001600160a01b0383166000908152600b6020908152604080832063ffffffff60001986011684529091529020600101549392505050565b600654600090610af89061146e8469d3c21bcecceda100000063ffffffff611fec16565b60065481565b60025460009061010090046001600160a01b0316331461193d576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b611948848484612087565b5060019392505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b670de0b6b3a764000081565b600b6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6000610af869d3c21bcecceda100000061146e60065485611fec90919063ffffffff16565b60025461010090046001600160a01b03163314611a31576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c15030545929181900390910190a15050565b600060095460001981611aa357fe5b04905090565b6000610daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120d9565b600082820183811015610daa576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b031614158015611b675750600081115b15611c92576001600160a01b03831615611bff576001600160a01b0383166000908152600c602052604081205463ffffffff169081611ba7576000611bd9565b6001600160a01b0385166000908152600b6020908152604080832063ffffffff60001987011684529091529020600101545b90506000611bed828563ffffffff611aa916565b9050611bfb86848484612170565b5050505b6001600160a01b03821615611c92576001600160a01b0382166000908152600c602052604081205463ffffffff169081611c3a576000611c6c565b6001600160a01b0384166000908152600b6020908152604080832063ffffffff60001987011684529091529020600101545b90506000611c80828563ffffffff611aeb16565b9050611c8e85848484612170565b5050505b505050565b600554611caa908263ffffffff611aeb16565b6005556000611cb8826118ba565b600954909150611cce908263ffffffff611aeb16565b600955611cd9611a94565b6006541115611d2c576040805162461bcd60e51b815260206004820152601a6024820152796d6178207363616c696e6720666163746f7220746f6f206c6f7760301b604482015290519081900360640190fd5b6001600160a01b038316600090815260076020526040902054611d55908263ffffffff611aeb16565b6001600160a01b03808516600090815260076020908152604080832094909455600a905291822054611d8992911683611b45565b604080516001600160a01b03851681526020810184905281517f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885929181900390910190a16040805183815290516001600160a01b038516916000916000805160206126b78339815191529181900360200190a3505050565b600554611e14908263ffffffff611aa916565b6005556000611e22826118ba565b600954909150611e38908263ffffffff611aa916565b600955611e43611a94565b6006541115611e96576040805162461bcd60e51b815260206004820152601a6024820152796d6178207363616c696e6720666163746f7220746f6f206c6f7760301b604482015290519081900360640190fd5b6001600160a01b038316600090815260076020526040902054611ebf908263ffffffff611aa916565b6001600160a01b03808516600090815260076020908152604080832094909455600a905291822054611ef49291169083611b45565b604080516001600160a01b03851681526020810184905281517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5929181900390910190a16040805183815290516000916001600160a01b038616916000805160206126b78339815191529181900360200190a3505050565b6001600160a01b038083166000818152600a6020818152604080842080546007845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611fe6828483611b45565b50505050565b600082611ffb57506000610af8565b8282028284828161200857fe5b0414610daa5760405162461bcd60e51b815260040180806020018281038252602181526020018061266f6021913960400191505060405180910390fd5b6000610daa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122d5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611c9290849061233a565b600081848411156121685760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561212d578181015183820152602001612115565b50505050905090810190601f16801561215a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006121944360405180606001604052806034815260200161263b603491396124f2565b905060008463ffffffff161180156121dd57506001600160a01b0385166000908152600b6020908152604080832063ffffffff6000198901811685529252909120548282169116145b1561221a576001600160a01b0385166000908152600b6020908152604080832063ffffffff6000198901168452909152902060010182905561228b565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600b84528681208b8616825284528681209551865490861663ffffffff199182161787559251600196870155908152600c9092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600081836123245760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561212d578181015183820152602001612115565b50600083858161233057fe5b0495945050505050565b61234c826001600160a01b031661254f565b61239d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106123db5780518252601f1990920191602091820191016123bc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461243d576040519150601f19603f3d011682016040523d82523d6000602084013e612442565b606091505b509150915081612499576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611fe6578080602001905160208110156124b557600080fd5b5051611fe65760405162461bcd60e51b815260040180806020018281038252602a8152602001806126d7602a913960400191505060405180910390fd5b600081600160201b84106125475760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561212d578181015183820152602001612115565b509192915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061258357508115155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125cc57805160ff19168380011785556125f9565b828001600101855582156125f9579182015b828111156125f95782518255916020019190600101906125de565b50612605929150612620565b5090565b604080518082019091526000808252602082015290565b610b0b91905b80821115612605576000815560010161262656fe415553433a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77415553433a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820d9bd5bbf6a7224c0dd8694a5e4b54b91925e64709621c62bc7363888edb7e44564736f6c63430005100032